package com.cydy.cyapp;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.BatteryManager;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.util.Set;

public class MainActivity extends AppCompatActivity {

    private TextView mTvVoltage;
    private TextView mTvTemperature;
    private TextView mTvLevel;
    private TextView mTvStatus;
    private TextView mTvHealth;
    private TextView mTvTechnology;
    private EditText chargeName;
    private Button chargeBtn;
    private Button cleanBtn;
    private Intent chargeContext;
    private TextView chargeText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTvVoltage = (TextView) findViewById(R.id.tv_voltage);
        mTvTemperature = (TextView) findViewById(R.id.tv_temperature);
        mTvLevel = (TextView) findViewById(R.id.tv_level);
        mTvStatus = (TextView) findViewById(R.id.tv_status);
        mTvHealth = (TextView) findViewById(R.id.tv_health);
        mTvTechnology = (TextView) findViewById(R.id.tv_technology);
        chargeName = findViewById(R.id.chargeName);
        chargeBtn = findViewById(R.id.chargeBtn);
        cleanBtn = findViewById(R.id.cleanBtn);
        chargeText = findViewById(R.id.chargeText);
        chargeText.setMovementMethod(ScrollingMovementMethod.getInstance());
        //注册事件监听器
        this.registerReceiver(this.mBatteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
        this.registerReceiver(this.mPowerReceiver, new IntentFilter(Intent.ACTION_POWER_CONNECTED));
        chargeBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    String result = chargeContext.getStringExtra(chargeName.getText().toString());
                    System.out.println(result);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        cleanBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chargeText.setText("");
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    private BroadcastReceiver mPowerReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            chargeContext = arg1;
            showAll(chargeContext);
        }
    };

    private BroadcastReceiver mBatteryReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            chargeContext = arg1;
            showBase(chargeContext);
            showAll(chargeContext);
        }
    };

    private void showBase(Intent arg1) {
        int voltage = arg1.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0);
        mTvVoltage.setText("电压：" + voltage / 1000 + "." + voltage % 1000 + "V");

        int temperature = arg1.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0);
        mTvTemperature.setText("温度：" + temperature / 10 + "." + temperature % 10 + "℃");
        if (temperature >= 300) {
            mTvTemperature.setTextColor(Color.RED);
        } else {
            mTvTemperature.setTextColor(Color.BLUE);
        }

        int level = arg1.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
        int scale = arg1.getIntExtra(BatteryManager.EXTRA_SCALE, 0);
        int levelPercent = (int) (((float) level / scale) * 100);
        mTvLevel.setText("电量：" + levelPercent + "%");
        if (level <= 10) {
            mTvLevel.setTextColor(Color.RED);
        } else {
            mTvLevel.setTextColor(Color.BLUE);
        }

        int status = arg1.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN);
        String strStatus = "未知状态";
        ;
        switch (status) {
            case BatteryManager.BATTERY_STATUS_CHARGING:
                strStatus = "充电中……";
                break;
            case BatteryManager.BATTERY_STATUS_DISCHARGING:
                strStatus = "放电中……";
                break;
            case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
                strStatus = "未充电";
                break;
            case BatteryManager.BATTERY_STATUS_FULL:
                strStatus = "充电完成";
                break;
        }
        mTvStatus.setText("状态：" + strStatus);

        int health = arg1.getIntExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN);
        String strHealth = "未知 :(";
        ;
        switch (status) {
            case BatteryManager.BATTERY_HEALTH_GOOD:
                strHealth = "好 :)";
                break;
            case BatteryManager.BATTERY_HEALTH_OVERHEAT:
                strHealth = "过热！";
                break;
            case BatteryManager.BATTERY_HEALTH_DEAD: // 未充电时就会显示此状态，这是什么鬼？
                strHealth = "良好";
                break;
            case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
                strHealth = "电压过高！";
                break;
            case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
                strHealth = "未知 :(";
                break;
            case BatteryManager.BATTERY_HEALTH_COLD:
                strHealth = "过冷！";
                break;
        }
        mTvHealth.setText("健康状况：" + strHealth);

        String technology = arg1.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);
        mTvTechnology.setText("电池技术：" + technology);
    }

    private void showAll(Intent intent) {
        chargeText.setText("");
        Bundle bundle = intent.getExtras();
        Set<String> strings = bundle.keySet();
        int i = 0;

        chargeText.append(intent.getAction() + "\n");
        chargeText.append("参数数量:\t" + strings.size() + "\n");
        for (String key : strings) {
            Object o = bundle.get(key);
            String value = String.valueOf(o);
            chargeText.append((i++) + ",\t" + key + "\t:" + value + "\n");
        }
    }
}
